Rancher 設定 Docker registries
實驗環境
- Rancher v1.6.5
- Docker v17.06.1-ce
適用環境
部署 Rancher 的機器,需要增加私有 Docker registry,且該 registry 有以下特性。
- 欲加入的 server 是同網段下的 DNS
- 欲加入的 server 使用 HTTPS 做預設連線
錯誤訊息釋例
前述條件,如 gitlab.ltc 便是此一設定。同網段底下的其它機器若需要連線至 gitlab.ltc,便需要下載其憑證。在下圖中,使用了 gitlab.ltc 的 image,便會出現其錯誤訊息。
錯誤訊息: Failed to allocate instance [container:xxxxxxx]: Bad instance [container:xxxxxxx] in state [error]: Error response from daemon: Get https://gitlab.ltc:4567/v2/: x509: certificate signed by unknown authority
相關解決方案
Step 1. 加入 registries
到 Rancher 的界面中,點選 INFRASTRUCTURE > Registries,加入 docker registry 的 server address 及 user 的登入資訊。
Step 2. 下載憑證
延續前小段,接下來有兩種解決方案,皆必須進入到 Rancher 主機的 console,分別為以下兩種:
套用範圍 | 生效方式 | |
---|---|---|
方案 A | docker | 直接生效 |
方案 B | 全域設定 | 重啟 docker |
其中方案一特別適合在已有運行中 containers 的機器上,因此不適合重啟 docker;而方案二適合在該機器中,還會有其它服務、程式會連線至相同 server。
方案 A (不須重啟,僅 docker 生效)
A-1. 產生 client 端的 certificates
此階段需要產生三份檔案: client.key、client.cert 與 ca.crt。
1 | Creating the client certificates. |
A-2. 將檔案移至 /etc/docker/certs.d
1 | Create folder and copy certificates into folder. |
參考文件: Verify repository client with certificates
方案 B (須重啟,全域生效)
B-1. 產生 certificates
此階段需要產生一份檔案: ca.crt。
1 | Creating the certificates. |
B-2. 將檔案移至 /usr/local/share/ca-certificates/
1 | Copy certificate into folder. |
B-3. 套用並生效
1 | Update CA (include the remove). |
參考文件: Adding trusted root certificates to the server
方案 B 的懶人包
以下的 shell 已將方案二實做,透過以下指令能夠快速加入憑證至本機中。
於 CI/CD 樣板 的 /manager/gitlab_certificate.sh
。而這項設定是全域性的。
1 | !!! 請注意,該 shell 會進行 docker restart !!! |
其它方案 (不推薦)
設定 daemon.json
於 /etc/docker/daemon.json
新增此段:
1 | { |